package com.bstek.code.util;

import java.util.HashMap;
import java.util.Map;

public class CodeUtil {

	/**
	 * 根据数据库表名转换成实体对象名称
	 * 
	 * @author hans
	 * @createDate 2016年5月30日
	 * 
	 * @param tableName
	 * @return
	 * @throws Exception
	 */
	public static String getEntityName(String tableName) {
		String entityName = "";
		String[] names = tableName.split("_");
		for (String name : names) {
			String newName = name.substring(0, 1).toUpperCase()
					+ name.replaceFirst("\\w", "").toLowerCase();
			entityName += newName;
		}
		return entityName;
	}

	/**
	 * 根据数据库字段名转换成实体对象名称,驼峰命名法
	 * 
	 * @author hans
	 * @createDate 2016年5月30日
	 * 
	 * @param tableName
	 * @return
	 * @throws Exception
	 */
	public static String getFieldName(String fName) {
		String entityName = "";
		String[] names = fName.split("_");
		for (int i = 0; i < names.length; i++) {
			if (i == 0) {
				entityName += names[0].toLowerCase();
			} else {
				entityName += names[i].substring(0, 1).toUpperCase()
						+ names[i].replaceFirst("\\w", "").toLowerCase();
			}
		}
		return entityName;
	}

	/**
	 * 获取 javaBean 中@column
	 * 
	 * @author hans
	 * @createDate 2017年6月19日
	 * @param fieldType
	 *            Java数据类型
	 * @param nullable
	 *            是否为空
	 * @param columnName
	 *            列名
	 * @param dataLength
	 *            字符长度
	 * @param dataPrecision
	 *            数值型长度
	 * @param dataScale
	 *            精度
	 * @return
	 */
	public static String getColStr(String fieldType, boolean nullable,
			String columnName, int dataLength, int dataPrecision,
			int dataScale) {
		StringBuffer strPrint = new StringBuffer();
		if (fieldType.equalsIgnoreCase("String")) {
			if (nullable == false) {
				// 非空
				strPrint.append("@Column(name = \"" + columnName
						+ "\", length = " + dataLength + ", nullable = false)");
			} else {
				// 可为空
				strPrint.append("@Column(name = \"" + columnName
						+ "\", length = " + dataLength + ")");
			}
		} else if (fieldType.equalsIgnoreCase("Integer")) {
			if (nullable == false) {
				// 非空
				strPrint.append("@Column(name = \"" + columnName
						+ "\", nullable = false)");
			} else {
				// 可为空
				strPrint.append("@Column(name = \"" + columnName + "\")");
			}
		} else if (fieldType.equalsIgnoreCase("Long")) {
			if (nullable == false) {
				// 非空
				strPrint.append("@Column(name = \"" + columnName
						+ "\", nullable = false)");
			} else {
				// 可为空
				strPrint.append("@Column(name = \"" + columnName + "\")");
			}
		} else if (fieldType.equalsIgnoreCase("BigDecimal")) {
			if (nullable == false) {
				// 非空
				strPrint.append("@Column(name = \"" + columnName
						+ "\", precision = " + dataPrecision + ", scale="
						+ dataScale + ", nullable = false)");
			} else {
				// 可为空
				strPrint.append("@Column(name = \"" + columnName
						+ "\", precision = " + dataPrecision + ", scale="
						+ dataScale + ")");
			}
		} else if (fieldType.equalsIgnoreCase("Date")) {
			if (nullable == false) {
				// 非空
				strPrint.append("@Column(name = \"" + columnName
						+ "\", nullable = false)");
			} else {
				// 可为空
				strPrint.append("@Column(name = \"" + columnName + "\")");
			}
		} else if (fieldType.equalsIgnoreCase("BLOB")||fieldType.equalsIgnoreCase("CLOB")) {
			//大字段，暂支持自动不持久化，需要开发人员自行实现
			strPrint.append("@Transient");
		} else {
			throw new RuntimeException("暂不支持的字段类型" + fieldType);
		}
		return strPrint.toString();
	}

	/**
	 * 生成set块
	 * 
	 * @author hans
	 * @createDate 2016年5月30日
	 * 
	 * @param fieldName
	 * @param fieldType
	 */
	public static String createSet(String fieldName, String fieldType,
			String comments) {
		StringBuffer str = new StringBuffer();
		str.append("\r\n");
		str.append("	/**");
		str.append("\r\n");
		str.append("	* set" + comments);
		str.append("\r\n");
		str.append("	* @param " + fieldName);
		str.append("\r\n");
		str.append("	*/");
		str.append("\r\n");
		str.append("	public void set" + fieldName.substring(0, 1).toUpperCase()
				+ fieldName.replaceFirst("\\w", "") + "(" + fieldType + " "
				+ fieldName + ") {");
		str.append("\r\n");
		str.append("		this." + fieldName + " = " + fieldName + ";");
		str.append("\r\n");
		str.append("	}");
		str.append("\r\n");
		return str.toString();
	}

	/**
	 * 生成get块
	 * 
	 * @author hans
	 * @createDate 2016年5月30日
	 * 
	 * @param fieldName
	 * @param fieldType
	 */
	public static String createGet(String fieldName, String fieldType,
			String comments) {
		StringBuffer str = new StringBuffer();
		str.append("\r\n");
		str.append("	/**");
		str.append("\r\n");
		str.append("	* get" + comments);
		str.append("\r\n");
		str.append("	* @return");
		str.append("\r\n");
		str.append("	*/");
		str.append("\r\n");
		str.append("	public " + fieldType + " get"
				+ fieldName.substring(0, 1).toUpperCase()
				+ fieldName.replaceFirst("\\w", "") + "()  {");
		str.append("\r\n");
		str.append("		return " + fieldName + ";");
		str.append("\r\n");
		str.append("	}");
		str.append("\r\n");
		return str.toString();
	}

	/**
	 * 
	 * @description 生成目录
	 * @author zhangkun
	 * @date 2020年5月25日
	 * @param type
	 * @param filePath
	 * @param des
	 * @return
	 */
	public static Map<String,Object> generateMenu(String type , String filePath , String des){
		Map<String,Object> ret = new HashMap<String,Object>();
		ret.put("type" , type);
		ret.put("filePath" , filePath);
		ret.put("des" , des);
		return ret;
	}
	
	/**
	 * 
	 * @description 生成文件名
	 * @author zhangkun
	 * @date 2020年5月25日
	 * @param type
	 * @param filePath
	 * @param tabName
	 * @param fileName
	 * @return
	 */
	public static Map<String,Object> generaeFileName(String type,String filePath,String tabName,String fileName){
		Map<String,Object> ret = new HashMap<String,Object>();
		ret.put("type", type);
		ret.put("filePath",filePath);
		ret.put("tabName", tabName);
		ret.put("fileName", fileName);
		return ret;
	}
	
	public static void main(String[] args) {

	}

}
